// redux的配置文件 redux作用类似vuex 用来管理公用状态
import { createStore } from 'redux'

// 准备数据，类似vuex中的state。这里是唯一的数据来源
const initState = {
    age: 18,
    money: 0
}

// 这个对象用来管理所有action的type值  在其他组件中使用dispatch时 需要先引入这个文件
export const actionTypes = {
    AGEADD: 'AGEADD',
    RECHARGE: 'RECHARGE',
}

// action对象的生成器,就是一个存放了好多函数的对象，这些函数可以生成action对象
export const actionCreator = {
    ageAdd: ()=>({type: actionTypes.AGEADD}),
    recharge: (num) => ({type: actionTypes.RECHARGE, num})
}

// reducer是一个函数 用来修改数据
// reducer是一个纯函数 没有额外的读写操作 没有随机数 可以根据参数确定返回值
// 第一个参数是原数据 state  可以设置默认值
// 第二个参数是action 告诉我们要怎么样修改数据
const reducer = (state = initState, action) => {
    // state状态是只读的 当修改数据时 不是修改数据 而是返回一个新的数据  只换不修
    switch (action.type) {
        case actionTypes.AGEADD:
            return {
                ...state,
                age: state.age + 1
            }
        case actionTypes.RECHARGE:
            return {
                ...state, // 这里已经包含了state的完整数据
                money: state.money+action.num // 这里只是修改了需要修改的那一项
            }
        default:
            return state
    }
}

const store = createStore(reducer);

export default store